package com.sinosoft.dsp.platform.components;

import java.util.Map;

import org.primefaces.json.JSONObject;

import com.sinosoft.builder.templates.view.LayoutType;
import com.sinosoft.builder.templates.view.SceneType;
import com.sinosoft.builder.templates.view.TemplateType;
import com.sinosoft.dsp.platform.utils.IStatefulBean;
import com.sinosoft.dsp.system.core.exception.SinoException;
import com.sinosoft.dsp.system.core.exception.SinoXMLException;
import com.sinosoft.dsp.system.to.IGenericTO;

/**
 * ViewBean的基础接口类
 * 
 * @since 1.0 2010-3-24
 * @author 潘巍（Peter Pan）
 * 
 */
public interface IViewBean extends IStatefulBean {

	/**
	 * 获得视图的ID
	 * 
	 * @return
	 */
	public String getId();

	/**
	 * 设置视图ID
	 * 
	 * @param id
	 */
	public void setId(String id);

	/**
	 * 获得一个场景
	 * 
	 * @throws SinoXMLException
	 * 
	 * @return
	 */
	public SceneType getScene() throws SinoXMLException;

	/**
	 * 是否有内容属性
	 * 
	 * @return
	 */
	public boolean hasContent();

	/**
	 * 获得内容
	 * 
	 * @return
	 */
	public IViewBean getContent();

	/**
	 * 设置内容ViewBean
	 * 
	 * @param vb
	 */
	public void setContent(IViewBean vb);

	/**
	 * 是否有父
	 * 
	 * @return
	 */
	public boolean hasParent();

	/**
	 * 获得父内容
	 * 
	 * @return
	 */
	public IViewBean getParent();

	/**
	 * 设置父内容ViewBean
	 * 
	 * @param vb
	 */
	public void setParent(IViewBean vb);

	/**
	 * 获得视图模板
	 * 
	 * @throws SinoXMLException
	 * @return
	 */
	public TemplateType getTemplate() throws SinoXMLException;

	/**
	 * 设置视图模板，通过模板ID
	 * 
	 * @param t
	 * @return
	 */
	public void setTemplate(String templateId) throws SinoXMLException;

	/**
	 * 获得视图层
	 * 
	 * @throws SinoXMLException
	 * @return
	 */
	public LayoutType getLayout() throws SinoXMLException;

	/**
	 * 构造ViewBean
	 * 
	 * @param sceneId
	 * @param layout
	 * 
	 * @throws SinoException
	 */
	public void construct(String sceneId, String layout) throws SinoException;

	/**
	 * 初始化
	 * 
	 * @param tos
	 * @throws SinoException
	 */
	public void init(IGenericTO tos) throws SinoException;

	/**
	 * 获得初始化参数
	 * 
	 * @return
	 */
	public JSONObject getInitParameters();

	/**
	 * 初始化参数
	 * 
	 * @param initParameters
	 */
	public void setInitParameters(JSONObject initParameters);

	/**
	 * ViewBean属性
	 * 
	 * @return
	 */
	public Map<String, String> getAttrs();

	public void setAttrs(Map<String, String> attrs);

	public void putAttr(String key, String attr);

	public String getAttr(String key);

}
